From 9d321437b664f6909011c59837739d8bce4863f4 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 17 Feb 2011 01:24:43 -0500 Subject: [PATCH] Add a private function for accessible factory registration This avoids repeating the same code for each widget that has its own accessible implementation inside GTK+. --- gtk/Makefile.am | 1 + gtk/gtkaccessible.c | 31 +++++++++++++++++++++++++++++++ gtk/gtkaccessibleprivate.h | 31 +++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 gtk/gtkaccessibleprivate.h diff --git a/gtk/Makefile.am b/gtk/Makefile.am index c95adb7323..3569262923 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -376,6 +376,7 @@ endif gtk_private_h_sources = \ gtk9slice.h \ gtkaccelgroupprivate.h \ + gtkaccessibleprivate.h \ gtkanimationdescription.h \ gtkappchooserprivate.h \ gtkappchoosermodule.h \ diff --git a/gtk/gtkaccessible.c b/gtk/gtkaccessible.c index 532f476e7f..81e0fec2b6 100644 --- a/gtk/gtkaccessible.c +++ b/gtk/gtkaccessible.c @@ -131,3 +131,34 @@ gtk_accessible_real_connect_widget_destroyed (GtkAccessible *accessible) &priv->widget); } } + +/* + * _gtk_accessible_set_factory_type: + * @widget_type: a #GtkWidget subtype + * @factory_type: a #AtkObjectFactory subtype + * + * A wrapper around atk_registry_set_factory_type(). + * + * Only installs the factory if accessibility is + * enabled. + */ +void +_gtk_accessible_set_factory_type (GType widget_type, + GType factory_type) +{ + AtkObjectFactory *factory; + AtkRegistry *registry; + GType accessible_type; + + /* + * Figure out whether accessibility is enabled by looking + * at the type of the accessible object which would be created + * for GtkWidget. + */ + registry = atk_get_default_registry (); + factory = atk_registry_get_factory (registry, GTK_TYPE_WIDGET); + accessible_type = atk_object_factory_get_accessible_type (factory); + if (g_type_is_a (accessible_type, GTK_TYPE_ACCESSIBLE)) + atk_registry_set_factory_type (registry, widget_type, factory_type); +} + diff --git a/gtk/gtkaccessibleprivate.h b/gtk/gtkaccessibleprivate.h new file mode 100644 index 0000000000..6bf5a50122 --- /dev/null +++ b/gtk/gtkaccessibleprivate.h @@ -0,0 +1,31 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 2011 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __GTK_ACCESSIBLE_PRIVATE_H__ +#define __GTK_ACCESSIBLE_PRIVATE_H__ + +#include "gtkaccessible.h" + +G_BEGIN_DECLS + +void _gtk_accessible_set_factory_type (GType widget_type, + GType factory_type); + +G_END_DECLS + +#endif /* __GTK_ACCESSIBLE_PRIVATE_H__ */ -- 2.30.2